load(
    "//bazel:tachyon_cc.bzl",
    "tachyon_cc_binary",
    "tachyon_cc_library",
)

tachyon_cc_library(
    name = "fft_config",
    testonly = True,
    srcs = ["fft_config.cc"],
    hdrs = ["fft_config.h"],
    deps = [
        "//benchmark:config",
        "//tachyon/base/console",
        "//tachyon/base/containers:container_util",
        "//tachyon/base/ranges:algorithm",
    ],
)

tachyon_cc_library(
    name = "fft_runner",
    testonly = True,
    hdrs = ["fft_runner.h"],
    deps = [
        "//benchmark:simple_reporter",
        "//tachyon/base/time",
        "//tachyon/math/polynomials/univariate/icicle:icicle_ntt_holder",
    ],
)

tachyon_cc_binary(
    name = "fft_benchmark",
    testonly = True,
    srcs = ["fft_benchmark.cc"],
    deps = [
        ":fft_config",
        ":fft_runner",
        "//benchmark/fft/arkworks",
        "//benchmark/fft/bellman",
        "//benchmark/fft/halo2",
        "//tachyon/base:profiler",
        "//tachyon/c/math/polynomials/univariate:bn254_univariate_evaluation_domain",
        "//tachyon/math/elliptic_curves/bn/bn254:fr",
        "//tachyon/math/elliptic_curves/bn/bn254/halo2:bn254",
        "//tachyon/math/polynomials/univariate:univariate_evaluation_domain",
        "//tachyon/math/polynomials/univariate:univariate_evaluation_domain_factory",
    ],
)

tachyon_cc_binary(
    name = "fft_benchmark_gpu",
    testonly = True,
    srcs = ["fft_benchmark_gpu.cc"],
    deps = [
        ":fft_config",
        ":fft_runner",
        "//tachyon/base:profiler",
        "//tachyon/c/math/polynomials/univariate:bn254_univariate_evaluation_domain",
        "//tachyon/math/elliptic_curves/bn/bn254:fr",
        "//tachyon/math/polynomials/univariate:univariate_evaluation_domain",
        "//tachyon/math/polynomials/univariate:univariate_evaluation_domain_factory",
    ],
)
